วิธีการอนุญาต IAM Role ใน EC2 ที่สร้างใน Elastic Beanstalk
ครั้งนี้ผมจะมาแนะนำ วิธีการอนุญาต IAM Role ใน EC2 ที่สร้างใน Elastic Beanstalk โดยตั้งค่า IAM Role เพื่อให้สามารถเข้าถึง S3 จาก EC2 Instance ได้
สิ่งที่ต้องมี
※ต้องมี S3 Bucket ใน Amazon S3
สมมติว่าผมสร้าง S3 Bucket:tinnakorn-upload
เตรียมไว้แล้ว สามารถดูวิธีการทำได้ที่ลิงก์ด้านล่างนี้
ดูตัวอย่างที่นี่เฉพาะหัวข้อนี้: การสร้าง Buckets ใน Amazon S3
การสร้าง Role ใน IAM
ขั้นตอนนี้ผมจะสร้าง Role เพื่อนำไปใช้กับ EC2 ที่จะสร้างใน Elastic Beanstalk ในขั้นตอนถัดไปครับ
ดูตัวอย่างที่นี่เฉพาะหัวข้อนี้: การสร้าง Role ใน IAM
ตัวอย่างการสร้าง Role ใน IAM ของบทควมนี้
※Step 1: Select trusted entity
Trusted entity type: ◉AWS service
Use case
Common use cases: ◉EC2
(ข้อควรระวัง: เราจะไม่ใช้ Elastic Beanstalk ! แต่ให้ใช้ EC2)※Step 2: Add permissions
Permissions policies:AmazonS3FullAccess
,AWSElasticBeanstalkWebTier
※Step 3: Name, review, and create
Role details
Role name:ec2-tinnakorn-iamrole
การตั้งค่าตอนสร้าง Environment ใน Elastic Beanstalk
ตัวอย่างการสร้าง Environment ของบทความนี้
※Environment information
Environment name:tinnakorn-iamrole
(ชื่ออะไรก็ได้)
Domain:tinnakorn-iamrole
(ชื่ออะไรก็ได้)※Platform
Platform:PHP
※Application code
เลือกวิธีอัปโหลดไฟล์ตามที่คุณต้องการ
ต่อไปคือการตั้งค่าในConfigure more options
โดยทำตามหัวข้อดังต่อไปนี้
※หัวข้อ Security
คลิกปุ่มEdit
ที่หัวข้อ Security แล้วตั้งค่าดังนี้:
Virtual machine permissions
» IAM instance profile:ec2-tinnakorn-iamrole
» คลิกSave
เมื่อตั้งค่าตามขั้นตอนข้างต้นเสร็จแล้ว ให้เลื่อนลงมาด้านล่างสุดและคลิกปุ่มCreate environment
จากนั้นรอระบบเริ่มต้นสักครู่ครับ
ทดสอบการเข้าถึง S3 จาก EC2
เมื่อสร้าง EC2 ใน Elastic Beanstalk เสร็จแล้ว ทำการเชื่อมต่อไปยัง EC2 ด้วย PuTTY
ดูตัวอย่างที่นี่เฉพาะหัวข้อนี้: การ Connect to EC2 by PuTTY
แล้วรันคำสั่งด้านล่างนี้เพื่อทดสอบการเข้าถึง S3 จาก EC2
aws s3 ls s3://[bucket name]
Output (example)
ใน S3 Bucket ของผมมีไฟล์ 106702 20220721_1227.zip นี้อยู่ จึงแสดงออกมาแบบนี้
แต่ถ้ารันคำสั่งด้านบนนี้ไปแล้วไม่แสดง Error ก็ถือว่าเราสามารถเข้าถึง S3 จาก EC2 ได้ครับ
root@ip-172-31-46-190:~
Using username "ec2-user".
Authenticating with public key "imported-openssh-key"
_____ _ _ _ ____ _ _ _
| ____| | __ ___| |_(_) ___| __ ) ___ __ _ _ __ ___| |_ __ _| | | __
| _| | |/ _ \/ __| __| |/ __| _ \ / _ \/ _\ | '_ \/ __| __/ _\ | | |/ /
| |___| | (_| \__ \ |_| | (__| |_) | __/ (_| | | | \__ \ || (_| | | <
|_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
Amazon Linux 2 AMI
This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
WILL BE LOST if the instance is replaced by auto-scaling. For more information
on customizing your Elastic Beanstalk environment, see our documentation here:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
[ec2-user@ip-172-31-46-190 ~]$ aws s3 ls s3://tinnakorn-upload
2022-07-25 10:16:31 106702 20220721_1227.zip
[ec2-user@ip-172-31-46-190 ~]$
เพียงเท่านี้การตั้งค่า IAM Role เพื่อให้สามารถเข้าถึง S3 จาก EC2 Instance ได้ก็เสร็จเรียบร้อย
ทีนี้เราก็สามารถ Upload, Download หรือจะนำข้อมูลใน S3 ไปใช้งานร่วมกับ Service อื่นๆ ได้แล้วครับ
สรุป
การสาธิตนี้ผมได้เน้นไปที่การตั้งค่าอนุญาต IAM Role และทดสอบการเข้าถึง S3 จาก EC2 โดยใช้ EC2 Instance ที่สร้างใน Elastic Beanstalk ครับ
ในบทความนี้ ผมได้เขียนวิธีการเข้าถึง S3 จาก EC2 บน Elastic Beanstalk ซึ่งเราสามารถเข้าถึง Service อื่นๆของ AWS ได้โดยเปลี่ยนการตั้งค่า Permission บน IAM Role ครับ